package com.blog1.common.util;

import com.blog1.common.constants.Constants;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.util.Date;
import java.util.Map;

@Slf4j
public class JwtUtils {
    // 定义一个静态的Key对象，使用Constants类中的JWT_KEY常量作为密钥
    private final static Key key= Keys.hmacShaKeyFor(Constants.JWT_KEY.getBytes(StandardCharsets.UTF_8));
    // 创建一个JWT令牌，参数为包含声明的Map对象
 public static String createToken(Map<String,Object>claims){
        // 使用Jwts.builder()创建一个JWT令牌构建器
     return Jwts.builder()
                // 设置声明的Map对象
             .setClaims(claims)
             .setIssuedAt(new Date())
             .setExpiration(new Date(System.currentTimeMillis()+Constants.EFFECTIVE_TIME))
                // 使用之前定义的key进行签名
             .signWith(key)
                // 调用compact()方法生成JWT令牌
             .compact();
 }

// 解析token
 public static Claims parseToken(String token){
     // 如果token为空，则返回null
     if(!StringUtils.hasLength(token)){
         return null;
     }
     Claims body=null;
     try{
         // 使用Jwts解析token，并设置签名密钥
        body = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
     }catch (Exception e){
log.error("token解析失败，token:{}",token);
     }
return body;
 }


}
